package Gestores;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

import javax.swing.JOptionPane;

import BD.ClaseVigenciaCostoBD;
import BD.TitularBD;
import Logica.ClaseLicencia;
import Logica.ClaseVigenciaCosto;
import Logica.Contribuyente;
import Logica.DataPair;
import Logica.DataPairCollection;
import Logica.Licencia;
import Logica.Titular;

public class TitularGestor {
	
	public static boolean crearTitular(int contribuyente, int operador, String grupoSanguineo, 
			String factorRH, String donanteOrganos){
		boolean creado=false;
		
		if(TitularBD.altaTitular(contribuyente, operador, grupoSanguineo, 
				factorRH, donanteOrganos)==-1){
			creado=true;
		}
		return creado;
	}
	public static Titular crearTitular(Contribuyente contribuyente, int operador, String grupoSanguineo, 
			String factorRH, String donanteOrganos){
		Titular titular=null;
		int idTitular=-1;
		idTitular =TitularBD.altaTitular(contribuyente.getId(), operador, grupoSanguineo, factorRH, donanteOrganos);
		if(idTitular!=-1){
			ResultSet resiltadoId = TitularBD.buscarIdTitular(contribuyente.getId());
			try{
				if(resiltadoId.next())
					idTitular=resiltadoId.getInt("id");
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			titular = new Titular();
			titular.setId(idTitular);
			titular.setContribuyente(contribuyente);
			titular.setGrupoSangineo(grupoSanguineo);
			titular.setFactor(factorRH);
			titular.setDonante(donanteOrganos);
}		
		return titular;
	}
	
	public static Titular buscarTitular(String tipoDocBusqueda,
			String nroDocBusqueda){
		Titular titular = null;
		Contribuyente contribuyente = ContribuyenteGestor.buscarContribuyente(tipoDocBusqueda, nroDocBusqueda);
		if(contribuyente!=null){

			ResultSet consulta = TitularBD.buscarTitular(contribuyente.getId());
			try {
				if(consulta.next())
					titular=new Titular(consulta.getInt("id"), contribuyente, consulta.getString("grupoSanguineo"), consulta.getString("factorRH"), consulta.getString("donanteOrganos"));
				else
					titular=new Titular(contribuyente);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return titular;
	}
	
	public static DataPair buscarContribuyenteOTitular(String tipoDocumento, String numeroDocumento){
		DataPair retorno=null;
		Titular titular;
		Contribuyente contribuyente = ContribuyenteGestor.buscarContribuyente(tipoDocumento, numeroDocumento);
		if(contribuyente!=null){

			ResultSet consulta = TitularBD.buscarTitular(contribuyente.getId());
			try {
				
				if(consulta.next()){
					titular=new Titular(consulta.getInt("id"), contribuyente, consulta.getString("grupoSanguineo"), consulta.getString("factorRH"), consulta.getString("donanteOrganos"));
					retorno= new DataPair<Titular>("Titular", titular);
				}
				else
					retorno= new DataPair<Contribuyente>("Contribuyente", contribuyente);
					
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return retorno;
	}
	public static Vector<Licencia> licenciaOtorgadasTitular(Titular titular){
		Vector<Licencia> licencias = null;
		ResultSet consulta = TitularBD.licenciasOtorgadasTitular(titular.getId());
		try {
			while(consulta.next()){
				if(licencias == null)
					licencias = new Vector<Licencia>();
				
				ClaseLicencia unaClaseLicencia = ClaseLicenciaGestor.buscarLicencia(consulta.getInt("clase"));
				Licencia licencia = new Licencia(consulta.getInt("id"), unaClaseLicencia, consulta.getDate("fechaEmision"), consulta.getDate("fechaVence"), consulta.getString("observaciones"), consulta.getInt("copia"), consulta.getString("estado"));
				
				licencias.add(licencia);
			}
				
				
			
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return licencias;
		
	}
	public static boolean actualizarTitular(Titular titular, String grupoSanguineo, 
			String factorRH, String donanteOrganos){
		boolean creado=false;
		
		if(TitularBD.actualizarTitular(titular.getId(),  grupoSanguineo, factorRH, donanteOrganos)!=-1){
			creado=true;
		}
		return creado;
		
	}

}
